import nibabel as nib
import matplotlib.pyplot as plt
import numpy as np

#加载.nii.gz文件
img=nib.load('BraTS20_Training_001_flair.nii')
mask=nib.load('BraTS20_Training_001_seg.nii')
#获取图像数据
image=img.get_fdata()
mask = mask.get_fdata()
# 选择一个切片进行显示（例如，第45个切片）
slice_index = 45
image_slice = image[:, :, slice_index]
mask_slice = mask[:, :, slice_index]

# 为了更好地可视化，我们可以将掩膜乘以一个较大的值，以便在叠加时更清晰地看到它
# 这里我们将掩膜的值设置为1（白色）和0.5的透明度
mask_slice_visual = (mask_slice * 255).astype(np.uint8)  # 将掩膜值放大到0-255范围


# 为了叠加，我们需要将图像和掩膜转换为RGB格式
# 图像保持为灰度，然后复制到RGB的三个通道中
image_slice_rgb = np.stack([image_slice] * 3, axis=-1).astype(np.uint8)

# 掩膜设置为红色，并创建一个与图像大小相同的RGB掩膜数组
# 这里我们使用255表示红色通道，0表示其他通道
mask_slice_rgb = np.zeros_like(image_slice_rgb, dtype=np.uint8)
mask_slice_rgb[:, :, 0] = 0  # B通道（蓝色）
mask_slice_rgb[:, :, 1] = 0  # G通道（绿色）
mask_slice_rgb[:, :, 2] = (mask_slice * 255).astype(np.uint8)  # R通道（红色）

# 使用透明度叠加图像和掩膜
overlay = (image_slice_rgb * (1 - 0.5) + mask_slice_rgb * 0.5).astype(np.uint8)

# 显示叠加的图像和掩膜（使用不同的颜色映射和透明度）
fig, ax = plt.subplots(1, 1, figsize=(8, 8))

# 显示图像切片
ax.imshow(image_slice, cmap='gray')

# 叠加掩膜切片，使用红色并设置透明度
# 注意：这里我们不再将掩膜值放大到0-255，而是直接使用0和1来表示掩膜的存在和不存在
# 我们将使用蓝色颜色映射，并通过设置alpha来控制透明度


ax.imshow(mask_slice, cmap='Blues', alpha=0.5)  # cmap='red'实际上会将1映射为红色，0映射为黑色（透明）

# 设置标题
ax.set_title(f'Slice {slice_index}: Image with Overlay Mask (Red, Alpha=0.5)')

# 显示图像
plt.show()